package com.leetcode.leetcode1;

/**
 * @program: 整数反转
 * @author: luhd
 * @create: 2021-08-19
 */

/**
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围[−2^31, 2^31− 1] ，就返回 0。
 *
 * 示例 1：
 * 输入：x = 123
 * 输出：321
 */
public class Practice07 {
    public static void main(String[] args) {
        int reverse = reverse(2147483647);
        //System.out.println(reverse);
        System.out.println(Integer.MAX_VALUE / 10);
    }
    public static int reverse(int x) {
        long a =0;
        while(x!=0){
            a = a*10 + x%10;
            x = x/10;
        }
        return (int)a==a?(int)a:0;
    }
    // 标准答案
    class Solution {
        public int reverse(int x) {
            int rev = 0;
            while (x != 0) {
                // 为什么可以 判断前九位？int型的最大值为2147483647，如果前九位大于214748364，最后一位就不用看了
                // 因为满足条件的int型数值第十位一定是1和2(输入的整型数值要满足小于2147483647，所以存在第十位一定小于等于2)，它是小于7的，所以只需要比较前九位
                if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
                    return 0;
                }
                int digit = x % 10;
                x /= 10;
                rev = rev * 10 + digit;
            }
            return rev;
        }
    }
}
